/*
 * @Description: In User Settings Edit
 * @Author: your name
 * @Date: 2019-08-27 08:41:51
 * @LastEditTime: 2019-08-27 09:49:17
 * @LastEditors: Please set LastEditors
 */
/*
 * @lc app=leetcode.cn id=19 lang=javascript
 *
 * [19] 删除链表的倒数第N个节点
 *
 * https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/description/
 *
 * algorithms
 * Medium (35.15%)
 * Likes:    496
 * Dislikes: 0
 * Total Accepted:    66.1K
 * Total Submissions: 187.9K
 * Testcase Example:  '[1,2,3,4,5]\n2'
 *
 * 给定一个链表，删除链表的倒数第 n 个节点，并且返回链表的头结点。
 * 
 * 示例：
 * 
 * 给定一个链表: 1->2->3->4->5, 和 n = 2.
 * 
 * 当删除了倒数第二个节点后，链表变为 1->2->3->5.
 * 
 * 
 * 说明：
 * 
 * 给定的 n 保证是有效的。
 * 
 * 进阶：
 * 
 * 你能尝试使用一趟扫描实现吗？
 * 
 */
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} n
 * @return {ListNode}
 */
var removeNthFromEnd = function(head, n) {
    if(!head.next){
        return null
    }
    const queue = []
    queue.push(head)
    var a = head.next
    while(a){
        queue.push(a)
        a = a.next
    }
    const len = queue.length
    const l = len - n - 1
    const r = len - n + 1
    if(n==1){
        queue[l].next = null
        return head
    }
    if(queue.length == n){
        return queue[r]
    }
    queue[l].next = queue[r]
    return head

};

